//
// Created by lqy on 2024/08/02.
//

#ifndef CMAKE_SAMPLE_SRC_APP_HLP_ALG_TEST_VIDEO_SOURCE_H_
#define CMAKE_SAMPLE_SRC_APP_HLP_ALG_TEST_VIDEO_SOURCE_H_

#include "log/log.h"
#include "alg_comm.h"
#include <opencv2/opencv.hpp>

namespace alg {

class VideoSource {
 public:
  VideoSource(std::string directoryPath, int32_t big_w, int32_t big_h, int32_t sma_w, int32_t sma_h);
  ~VideoSource();

  /**
   * 配置小图的分辨率
   * @param width
   * @param height
   * @return
   */
  int32_t SetSmallFrameRes(int32_t width, int32_t height);

  /**
   * 获取文件夹下的jpg文件数量
   * @return
   */
  int32_t GetTotalFrameCount();

  /**
   * 从文件读JPEG，转为YUV，缩放
   * @param pstBigFrame
   * @param pstSmallFrame
   * @return
   */
  int32_t GetYuvFromFile(VZ_HLP_ALG_Frame &bigFrame, VZ_HLP_ALG_Frame &smallFrame);

 private:
  /**
   * bgr 转为 nv12 格式
   * @param bgrImage
   * @param nv12Image
   * @return
   */
  int32_t convertBGRToNV12(const cv::Mat &bgrImage, cv::Mat &nv12Image);

  /**
   * nv12 转为算法的结构体
   * @param nv12Image
   * @param alg_frame
   * @return
   */
  int32_t CvImg2AlgFrame(const cv::Mat &nv12Image, VZ_HLP_ALG_Frame &algFrame, cv::Size imgSize);

 private:
  int32_t total_frame_ = 0;      //当前文件夹下的可用帧数量
  int32_t cur_frame_id_ = 0;     //当前使用的帧ID
  std::string cur_frame_path_;   //图片文件的路径

  int32_t big_frame_width_;      //算法使用的大图，高度
  int32_t big_frame_height_;     //算法使用的大图，宽度
  int32_t small_frame_width_;    //算法使用的小图，高度
  int32_t small_frame_height_;   //算法使用的小图，宽度

};

} // alg

#endif //CMAKE_SAMPLE_SRC_APP_HLP_ALG_TEST_VIDEO_SOURCE_H_
